package com.uzhie.jt808.service;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * Created by TangFei on 2018/8/9.
 * 平台主发的消息
 * TCP 方向 业务平台 --> 终端
 */
public interface JT808PostService {
    /**
     * 发送终端指令
     *
     * @param msgID  消息ID
     * @param simNum 终端SIM卡号
     * @param body   消息体
     */
    boolean post(int msgID, String simNum, byte[] body);

    /**
     * 批量发送终端指令
     *
     * @param msgID
     * @param simNums
     * @param body
     */
    boolean post(int msgID, List<String> simNums, byte[] body);

    /**
     * 发送终端指令
     *
     * @param jmsID  消息队列对应值
     * @param msgID  消息ID
     * @param simNum 终端 SIM 卡号
     * @param body   消息体
     * @return
     */
    boolean post(String jmsID, int msgID, String simNum, byte[] body);

    /**
     * 终端在线设备数
     */
    void onlineDev();

    /**
     * 查询终端是否在线
     *
     * @param simNum 终端SIM卡号
     * @return true 在线 false 离线
     */
    boolean isOnline(String simNum);

    /**
     * 下发指令 等待终端返回值
     *
     * @param msgID       消息ID
     * @param simNum      SIM
     * @param body        消息体
     * @param resultClass 返回值类型
     * @param <T>
     * @return
     * @throws NoSuchMethodException
     * @throws IllegalAccessException
     * @throws InvocationTargetException
     * @throws InstantiationException
     * @throws ExecutionException
     * @throws InterruptedException
     */
    <T> T postWithResult(int msgID, String simNum, byte[] body, Class<T> resultClass) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, ExecutionException, InterruptedException;

    boolean needReturn(int msgID);

}
